#pragma once
#include <iostream>
#include <boost/serialization/singleton.hpp>
#include "http/HttpServer.h"
#include "socket/WebsocektClient.h"
#include "ai/Engine.h"
#include "ai/AiMonitor.h"
#include "ai/FileClear.h"

class Box
	: public boost::serialization::singleton<Box>
{
public:
	Box();
	virtual ~Box();

public:
	// 启动盒子
	void Start();
	// 停止盒子
	void Stop();
	// 运行状态
	bool& IsRun();

public:
	// 获取HTTP服务
	HttpServerPtr GetHttpServer();
	// 获取ws客户端
	WebsocektClientPtr GetSocketClient();
	// 获取识别服务
	EnginePtr GetEngine();
	// 获取AI控制器
	AiMonitorPtr GetAiMonitor();
	// 获取文件清理
	FileClearPtr GetFileClear();

protected:
	// 运行标志
	bool m_do_run;
	// http服务
	HttpServerPtr m_http_server;
	// socket服务
	WebsocektClientPtr m_socket_client;
	// 识别引擎
	EnginePtr m_engine;
	// AI检测器
	AiMonitorPtr m_controller;
	// 文件清理
	FileClearPtr m_fileClear;
};
